10分钟理解深度学习中的~卷积~
今年来深度学习中的卷积神经网络
(上图是一个卷积神经网络形态)技术开始显现威力,通过简单的几行代码就能实现对图片、视频等信息的处理、学习和预测。
然而,理解卷积神经网络
,特别是对于第一次接触深度学习领域的人而言,太多玄而又玄
的词语,如卷积Convolution、卷积核Kernel、通道channels
,搞的大家晕头转向,不知所错。不过卷积Convolution
拥有十分强大的特征提取功能和高度可扩展性,在本文中我们将剖析其内部作用机制。
二维卷积2D Convolutions
讲解卷积,最直观的是对图片进行卷积,尤其是单通道(比如黑白图片是单通道,而彩色图片一般是三通道)的图片。这样的图片也就是2维数据,下面的动画就是对一张图片进行卷积操作
其中移动的小方框是卷积核
, 卷积核相当于权重矩阵,如下图所示
我们选取动画中的第一帧
,详解数据之间的关系,我们发现卷积核
移动过程中与其对应位置的数字相乘累加得到右侧图中的数字。
因此我们可以形象的将卷积
分别理解为:卷
大家可以理解成移动,积
可以理解成相乘累加。
经常使用的操作
填充操作
上面的卷积操作,得到的新图片尺寸变小。有时候为了让卷积后的图片尺寸不变,需要使用`填充操作padding
。例如在原始图片外围填充一圈0,最终通过卷积得到的新图片尺寸不变。
步长striding
比如我们移动卷积核
的跨度变大,例如从1变成2,请看下图
多通道
我们都知道屏幕是由图片有三元色,通过三种颜色就能组成五彩斑斓的颜色。而彩色图片只需要红、绿、蓝三种元色图片(三通道)组成的。如下图
而更多的情况是由多种通道组成的,如下图
注意对单通道数据
进行卷积
使用的是一个卷积核
。但是当对多通道数据
进行卷积使用的是多个卷积核
,这些卷积核彼此是不同的,所以每个通道得到的新特征矩阵也是各不相同。
每个通道产生每个通道的一个版本,并且过滤器filter
作为整体产生一个总特征矩阵
。
前面的所有的过程我们可以理解为Y = AX + b
当中的AX
,即对于输入的数据X
进行线性变换得到AX
。
但是为了保证AX
与Y
相匹配(对应),还需要残差项b
。如下图
局部性Locality
在本文的前半部分,我们讨论过:
卷积核kernel
综合提炼了来自局部位置的像素信息,并输出卷积后的特征矩阵。卷积核
是作用于整张图片的,在对一张图片每个局部位置进行扫描移动
的过程中,卷积核是不变的。
刚刚我们出现了扫描
这个词,比如我们对一张大头照
进行扫描,使用不同尺寸的卷积核
扫描出的信息是不同的。卷积核从小到大,可能依次扫描出的东西是 线条、鼻子、脸部、头
, 鼻子
是由各种线条
组成的。而脸部
包含鼻子
,头部
包含脸部
。
图片中的像素是有序出现的,比如相邻的两个像素往往颜色相近或相同。如果相邻像素存在差异
,那么这作为异常
就可以转换为特征
。这种思路也是早期电脑视觉处理
中常用的特征提取方法
。例如,对于边界检测edge detection
,我们可以使用Sobel边界检测滤波器(Sobel edge detection filter)
,这是一种卷积核参数,对单通道数据进行卷积。如下图
上图就是使用Sobel这种卷积核
处理后的结果,边缘位置都是灰色,而非边缘位置的像素全部变为0,即白色。因此,Sobel
卷积核能很好抽取出图片中的边界信息。
既然 卷积核 这么神奇,那么 卷积核的参数 是否可以学习?
答案是可以的,卷积神经网络的强大之处就在于可以从不同层面上对数据进行特征抽取。
对于在原始像素上操作的 早期层
,我们可以合理地期望具有相当低级别特征的 特征检测器
,例如 边缘 ,线
等。
我们看一个特征可视化
的例子, 卷积核
识别出的特征按照层次从低到高依次是 边、纹理、模式、局部、个体对象
。